// 集群，多进程，让多个进程来工作
// 进程也不能无限止的创建，进程它会消耗内存，在有一些应用中，不建议开多进程，
// 进程切换是要消耗cpu  复杂的计算 写入文件
// 进程创建的数量一般和cpu核数相同，最多不要超过4倍
const numCPUs = require('os').cpus().length
const cluster = require('cluster')

const urls = [
  'http://www.jj20.com/bz/nxxz/list_7_1.html',
  'http://www.jj20.com/bz/nxxz/list_7_2.html',
  'http://www.jj20.com/bz/nxxz/list_7_3.html',
  'http://www.jj20.com/bz/nxxz/list_7_4.html',
  'http://www.jj20.com/bz/nxxz/list_7_5.html',
  'http://www.jj20.com/bz/nxxz/list_7_6.html',
  'http://www.jj20.com/bz/nxxz/list_7_7.html',
  'http://www.jj20.com/bz/nxxz/list_7_8.html'
]

// 把子进程给放到单独的文件中
cluster.setupMaster({
  exec: './woker/spider.js'
});

if (cluster.isMaster) {
  console.log('主进程 == ' + process.pid);
  for (let i = 0; i < numCPUs; i++) {
    let worker = cluster.fork()
    worker.send(urls[i])
  }
}

let num = numCPUs
cluster.on('message', arg => {
  if (--num === 0) {
    console.log('master === 有返回');
    // 关闭子进程
    cluster.disconnect()
  }
})

// 子进程退出时，触发它，在创建一个子进程  pm2
cluster.on('exit', worker => {
  cluster.fork()
})


